package com.zzu.base.common.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Getter;
import java.time.LocalTime;
import java.util.Arrays;

/**
 * 课程节次枚举，包含每节课的时间信息
 * 上午和下午第二节课后休息20分钟，其他课间休息15分钟
 */
@Getter
public enum CourseSessionEnum {
    SESSION_1(1, LocalTime.of(8, 0), LocalTime.of(8, 45)),    // 第1节: 08:00-08:45
    SESSION_2(2, LocalTime.of(9, 0), LocalTime.of(9, 45)),     // 第2节: 09:00-09:45 (15分钟休息后)
    SESSION_3(3, LocalTime.of(10, 5), LocalTime.of(10, 50)),   // 第3节: 10:05-10:50 (20分钟休息后)
    SESSION_4(4, LocalTime.of(11, 5), LocalTime.of(11, 50)),   // 第4节: 11:05-11:50 (15分钟休息后)

    SESSION_5(5, LocalTime.of(14, 0), LocalTime.of(14, 45)),   // 第5节: 14:00-14:45 (午休后)
    SESSION_6(6, LocalTime.of(15, 0), LocalTime.of(15, 45)),   // 第6节: 15:00-15:45 (15分钟休息后)
    SESSION_7(7, LocalTime.of(16, 5), LocalTime.of(16, 50)),   // 第7节: 16:05-16:50 (20分钟休息后)
    SESSION_8(8, LocalTime.of(17, 5), LocalTime.of(17, 50)),   // 第8节: 17:05-17:50 (15分钟休息后)

    SESSION_9(9, LocalTime.of(19, 0), LocalTime.of(19, 45)),   // 第9节(晚自习1): 19:00-19:45 (晚休后)
    SESSION_10(10, LocalTime.of(20, 0), LocalTime.of(20, 45)); // 第10节(晚自习2): 20:00-20:45 (15分钟休息后)

    @JsonValue
    @EnumValue
    private final int sessionNumber;
    private final LocalTime startTime;
    private final LocalTime endTime;

    CourseSessionEnum(int sessionNumber, LocalTime startTime, LocalTime endTime) {
        this.sessionNumber = sessionNumber;
        this.startTime = startTime;
        this.endTime = endTime;
    }

    /**
     * 根据节次编号获取对应的枚举
     */
    public static CourseSessionEnum getByNumber(int number) {
        return Arrays.stream(values())
                .filter(session -> session.sessionNumber == number)
                .findFirst()
                .orElseThrow(() -> new IllegalArgumentException("无效的课程节次: " + number));
    }
}
